home *** CD-ROM | disk | FTP | other *** search
/ Netware Super Library / Netware Super Library.iso / inet_tcp / bootpd18 / bootpd.txt < prev    next >
Text File  |  1993-04-22  |  17KB  |  520 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.                      F R E E W A R E
  9.  
  10.  
  11.                  B O O T P  Server NLM for
  12.  
  13.                Novell Netware 3.11 and above
  14.  
  15.  
  16.                 Copyright 1993, by HellSoft
  17.  
  18.  
  19.      Comments and bugs to "meloun@vision.felk.cvut.cs"
  20.       New versions "nw311/bootpd:novell.felk.cvut.cs"
  21.      
  22.  
  23.           Written at Czech Technical University,
  24.                  Prague, Czech Republic
  25.                        E U R O P E
  26.  
  27.  
  28.  
  29. !!! WARNING !!!
  30. The top-level domain "cs" will be soon changed to "cz", due to
  31. splitting Czechoslovakia into Czech Republic and Slovakia. If "cs"
  32. doesn't work, please try "cz" instead. The change is expected about
  33. June 1993 and the "cs" domain should work in parallel at least till
  34. the end of the year.
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.   Introduction and Features
  55.  
  56. This NLM allows BOOTP protocol handling on Novell Netware 3.11 server.
  57. It is written according to RFC951 and RFC1048 specification.
  58.  
  59.  
  60. Features: - Supports multiple interfaces on server
  61.           - Static IP address assignments
  62.           - Dynamic IP address assigments
  63.           - Forward request capabilty
  64.           - Almost automated creation of the file with hosts definition
  65.       - Novell Netware 4.0 compatibility
  66.           - Build-in debuging mode
  67.       
  68. System requirements
  69.  BOOTPD NLM requires Novell Netware Server v3.11 or higher and RESOLV.NLM.
  70.  (RESOLV.NLM avaliable at "novell.felk.cvut.cs" in directory "nw311/resolv").
  71.  RESOLV.NLM does the name translation but if you have no name server you
  72.  must run RESOLV.NLM anyway, with no parameters.
  73.  
  74.  
  75.  
  76.  
  77. What BOOTP server does?
  78.  
  79.  Host machine identifies itself in the Internet environment using
  80.  BOOTP protocol. It receives IP address, subnet mask, default gateway
  81.  addresses, domain name server addresses, etc.
  82.  
  83.  
  84. How BOOTP server works?
  85.  
  86.  Incoming requests are divided into three categories that are processed
  87.  separately.
  88.  - request that contains MAC address and MAC type filled in "disable 
  89.    list".
  90.  - request that came through gateway (forwarded request). 
  91.  - request that came from the network connected directly to the 
  92.    interface.
  93.  
  94.  
  95.  The "disable list" with global scope for the server is searched 
  96.  first. If MAC address and MAC type of the request is found in the 
  97.  "disable list" then request is not processed at all. The "disable 
  98.  list" allows to have more than one server on one network (wire). The 
  99.  "giaddr" item in request is checked next. It allowes to distinguish 
  100.  between forwarded and non-forwarded requests. 
  101.  
  102.  Forwarded requests (i.e., request going through bootp gateway) are 
  103.  maintained by the "forward list" with global validity for the server.
  104.  This list contains complete information that is returned to 
  105.  requesting host.
  106.  
  107.  How is the request coming from the directly connected network 
  108.  processed?
  109.  If the request is received from the interface that was not properly 
  110.  configured for bootp (command board, see below) then it is discarded.
  111.  Every configured interface stores two lists. 
  112.  The first is the list of staticaly configured hosts and second is list of dynamicaly
  113.  configured hosts.
  114.  The "static list" is checked first. If MAC address and MAC type is found in 
  115.  this list, the reply is generated and the process ended.
  116.  The "static list" was moved from global scope to board scope from this
  117.  version, this allows using static assignments on servers with more
  118.  interfaces with short addresses (Arcnet).
  119.  
  120.  The "dynamic list" is checked next max. 3 times. Each item in the list 
  121.  contains a flag which determines if this item has MAC address and 
  122.  MAC type, and the time of last use.
  123.  
  124.  First, the "dynamic list" is searched for an item
  125.  containing the same 
  126.  MAC address and MAC type as the request. If it is found then the reply is generated and
  127.  the proccessing ended.
  128.  
  129.  Second, the "dynamic list" is searched for non-used item. If it
  130.  is found, MAC address and MAC type is stored to it, the item is marked as used,
  131.  reply is generated and proccessing ended.
  132.  
  133.  Third, the "dynamic list" is searched for the least recently used item. If
  134.  the
  135.  time interval of last using of this item is greater than TimeToLive, 
  136.  the item is reused. New MAC address and MAC type is stored to the item, reply is
  137.  generated and proccessing ended.
  138.  
  139.  Otherwise, error message is written to console.
  140.  
  141.  Or, briefly:
  142.   - The "disable list" is applied as input filter.
  143.   - If 
  144.       request is forwarded, the "forward list" is processed.
  145.      else
  146.       if packed is received  from unconfigured interface then proccessing
  147.                                 ends
  148.       the "static list" assigned to received interface is checked.
  149.       the "dynamic list" is checked for the same MAC address and MAC type.
  150.       the "dynamic list" is checked for non-used intem.    
  151.       the "dynamic list" is checked for least recently used item.
  152.       the error is reported.
  153.  
  154.  
  155. Configuration:
  156.  Configuration is very simple. 
  157.  
  158. The bootp response is generated according to a template. The template
  159. is defined as a sequence of template commands. The sequence defines
  160. the structure of the bootp response. There is one template per board
  161. and the template can have as many executive commands for different
  162. hosts as you like.
  163.  
  164. The configuration for every board looks like this:
  165.  
  166. - sequence of template commands
  167. - executive command for given hosts
  168. - optional (but almost always used) reset template
  169. - sequence of template commands
  170. - executive command for other hosts
  171. - optional (but almost always used) reset template
  172. .
  173. .
  174. .
  175.  
  176.  
  177.  
  178. Loading of the BOOTPD server:
  179.  
  180.  load  [path]BOOTPD use [file] 
  181.  
  182.  
  183.   use [file]
  184.     Specifies configuration file name.
  185.     Default: sys:system/bootpd.cfg
  186.  
  187.       load bootpd use sys:system/bootpd/config.cfg
  188.  
  189.  
  190.  
  191. BOOTPD Command line parameters:
  192.  BOOTPD show {[file]}
  193.  
  194.    bootpd show
  195.      Show assigned dynamic IP addresses and state of BOOTP server.
  196.  
  197.    bootpd show [file]
  198.      Save all dynamically assignments of IP addresses to file in
  199.      the format used for hosts file.
  200.      
  201.    bootpd {error | warning | debug }
  202.      Set the output verbose level. 
  203.                
  204. Configuration file
  205.  All empty lines and characters right to the '#' are ignored.
  206.  All IP addresses must be in numeric format.
  207.  
  208.  Command
  209.   ForwardFile [file name]
  210.   
  211.   Determines name of the forward description file. This file contains
  212.   configuration information for forwarded requests processing.
  213.  
  214.    ForwardFile  sys:system/bootpfwd.cfg
  215.  
  216.  Command
  217.   DisableFile [file name]
  218.   
  219.   Determines name of the disabled address file. Addresses in this 
  220.   file work as the input filter for request packets.
  221.  
  222.    DisableFile  sys:system/disabled.cfg
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  Command
  229.   Board [IP Address]
  230.  
  231.    This command sets properties of the particular interface and
  232.    enables processing of the BOOTP packet by this interface.
  233.  
  234.  
  235.    Subcommands of the Board command
  236.  
  237.    Subcommand LiveTime  [min]
  238.      Determine "TimeToLive" of dynamic assignment addresses. If it is zero, the 
  239.      dynamic assignmets cannot be reused.
  240.     
  241.  
  242.      TimeToLive    60            # Time to live is one hour 
  243.  
  244.  
  245.     Subcommand TimeOffset [offset]
  246.       Determines "time offset" returned to host. Optional. 
  247.       !!! WARNING !!! Many bootp cilents cannot handle this
  248.       option. Please, verify if all of your bootp clients work properly
  249.       when time offset information is returned to host.
  250.  
  251.       This is a template subcommand.
  252.  
  253.        TimeOffset    60
  254.       or
  255.        TimeOffset    ?               # Time offset is set to same value as on
  256.                    # file server
  257.  
  258.     Subcommand Gateway [IP address]
  259.       Determines "default gateway" returned to host. Optional.
  260.       Maximum 4 gateways may be specified.
  261.       This is a template subcommand.
  262.  
  263.        Gateway        147.32.14.4
  264.       or
  265.        Gateway        ?               # Default gateway is set to same address
  266.                    # as that used in "Board" command.
  267.     Subcommand CookieServer [IP address]
  268.       Determines "CookieServer" returned to host. Optional.
  269.       Maximum 4 Cookie servers may be specified.
  270.       This is a template subcommand.
  271.  
  272.        CookieServer  147.32.14.4
  273.       or
  274.        CookieServer  ?               # Cookie server is set to same address
  275.                    # as that used in "Board" command.
  276.     Subcommand LPRServer [IP address]
  277.       Determines "LPRServer" returned to host. Optional.
  278.       Maximum 4 LPR servers may be specified.
  279.       This is a template subcommand.
  280.  
  281.        LPRServer  147.32.14.4
  282.       or
  283.        LPRServer  ?               # LPR server is set to same address
  284.                    # as that used in "Board" command.
  285.  
  286.     Subcommand DNSServer [IP address]
  287.       Determines "DNSServer" returned to host. Optional.
  288.       Maximum 4 DNS servers may be specified.
  289.       This is a template subcommand.
  290.  
  291.        DNSServer  147.32.14.4
  292.       or
  293.        DNSServer  ?               # DNS servers is set to same addreses
  294.                    # as that used when resolv.nlm is loaded
  295.  
  296.  
  297.     Subcommand DynamicMask  [IP address mask]
  298.     Subcommand DynamicName  ["C" format string]
  299.       They determine the name for dynamically assigned hosts. The name 
  300.       is created as follows: the IP address of the host is masked (ANDed)
  301.       with DynMask. The result is used as the argument for a C-like 
  302.       sprintf function with a format string DynName.
  303.        
  304.       If the output of sprintf is exactly "?", the host name 
  305.       is resolved from the IP address by the name server.
  306.       The generation is enabled, when DynamicName is defined.
  307.       This is a template subcommand.
  308.  
  309.       In "C" conventions:
  310.       sprintf(HostName, DynName, HostIPAddress & DynMask);
  311.  
  312.       DynamicMask  0.0.0.255        # Only the last octet
  313.       DynamicName  MyPC-%3.3d-Dyn    # Generate Names "MyPC-001-Dyn"
  314.                                         #                "MyPC-012-Dyn"
  315.                                         #                "MyPC-128-Dyn"
  316.                     
  317.  
  318.       DynamicMask  0.0.0.255        # Only the last octet
  319.       DynamicName  MyPC-%d        # Generate Names "MyPC-1"
  320.                                         #                "MyPC-12"
  321.                                         #                "MyPC-128"
  322.  
  323.  
  324.       DynamicName  ?            # Host name is resolved
  325.                     # via resolv.nlm from name server
  326.                     # The name is resolved only when this
  327.                     # address is used for the first time.
  328.                     
  329.  
  330.     Subcommand BootFileName ["C" format string]
  331.       It determines the name of boot file for dynamically assigned hosts.
  332.       The name is created using same rules as in Dynamic Name, with one 
  333.       exception: the question mark is valid boot file name.
  334.       This is a template subcommand.
  335.  
  336.       In "C" conventions:
  337.       sprintf(BootFile, BootFileName, HostIPAddress & DynMask);
  338.  
  339.  
  340.       DynamicMask   0.0.0.255        # Only the last octet
  341.       BootFileNAme  Boot-%d        # Generate Names
  342.                     #         "Boot-1"
  343.                                         #                "Boot-12"
  344.                                         #                "Boot-128"
  345.    
  346.     Subcommand ResetTemplate
  347.       This subcommand resets the host template to the inital state - 
  348.       only subnet mask is set to the same value as on the configured board.
  349.       This is a template subcommand      
  350.  
  351.  
  352.  
  353.  
  354.     Subcommand DynamicHosts [range] [IP address]
  355.       This subcommand set dynamic assignment of IP addresses
  356.       for given interface. The assignment begins with [IP address]
  357.       address and generates [range] addresses. The dynamic 
  358.       assigment is generated by previously defined template. All 
  359.       next changes to the template have no effect to these assigments.
  360.       This is an executive subcommand.
  361.  
  362.       Motivation: I don't like long numbers like Ethernet MAC
  363.                   addresses. So first I enable the dynamic assignment
  364.                   and after some time I save the created database by
  365.                   Show [file] command. Then I only add the host names
  366.                   and I have a hosts file for future use.
  367.  
  368.       Acknowledgement: Thanks to Phil Karn and his KA9Q for inspiration.
  369.  
  370.       DynamicHosts  126    147.32.15.128        # IP addresses from 
  371.                                                 # 147.32.15.128 to
  372.                                       # 147.32.15.254 will 
  373.                         # be assigned
  374.                                                 # dynamically
  375.  
  376.  
  377.    Subcommand StaticHosts [Hosts file name for this interface]
  378.      This subcomand determines the file name used for static hosts 
  379.      definition for this interface.
  380.      This is an executive subcommand.
  381.  
  382.      StaticHosts   sys:system/int1hst.cfg
  383.      
  384.      
  385.  
  386.  
  387. Hosts File
  388.   Determines static assignments IP address <-> MAC address for 
  389.   each board.
  390.   See sample file HOSTS.CFG.
  391.  
  392.   Format:
  393.    [Host Name] [MAC type] [MAC address] [IP Address] {[Boot file name]}
  394.  
  395.    Host Name  - Host name, up to 40 characters. If host name is
  396.         "?" the BOOTPD resolves host name via resolv.nlm
  397.                 from name server.
  398.              
  399.    MAC type and address
  400.           - Ethernet  
  401.             MAC address has 6 bytes, format "01:23:45:67:89"
  402.           Numbers in hex
  403.           - Pronet
  404.           MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
  405.           - IEEE802
  406.           All networks via standard IEEE 802 (Token-ring,...)
  407.           MAC address has 6 bytes, format "01:23:45:67:89"
  408.           Numbers in hex
  409.           - Arcnet
  410.           MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
  411.  
  412.   IP address  - IP address assigned to this host
  413.   
  414.   Boot file name
  415.               - (optional) Name of boot file returned to host.
  416.  
  417.  
  418.  
  419. Disable file
  420.  Defines input filer for requests.
  421.  
  422.  Format:
  423.     [MAC type] [MAC address] 
  424.  
  425.    MAC type and address
  426.           - Ethernet  
  427.             MAC address has 6 bytes, format "01:23:45:67:89"
  428.           Numbers in hex
  429.           - Pronet
  430.           MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
  431.           - IEEE802
  432.           All networks via standard IEEE 802 (Token-ring,...)
  433.           MAC address has 6 bytes, format "01:23:45:67:89"
  434.           Numbers in hex
  435.           - Arcnet
  436.           MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
  437.  
  438.  
  439.  
  440. Forward file
  441.  This file contains configuration information for forwarded 
  442.  requests processing. Template idea (same as in BOARD command) is used.
  443.  
  444.  
  445.     Subcommand TimeOffset [offset]
  446.       Determines "time offset" returned to host. Optional. 
  447.       !!! WARNING !!! Many bootp cilents cannot handle this
  448.       option. Please, verify if all of your bootp clients work properly
  449.       when time offset information is returned to host.
  450.       This is a template subcommand.
  451.  
  452.        TimeOffset    60
  453.  
  454.     Subcommand Gateway [IP address]
  455.       Determines "default gateway" returned to host. Optional.
  456.       Maximum 4 gateways may be specified.
  457.       This is a template subcommand.
  458.  
  459.        Gateway        147.32.14.4
  460.  
  461.                    # as that used in "Board" command.
  462.     Subcommand Subnet [IP mask]
  463.       Determines "subnet mask" returned to host. Optional.
  464.       Maximum 4 subnets may be specified.
  465.       This is a template subcommand.
  466.  
  467.        Subnet        255.255.255.240
  468.  
  469.     Subcommand CookieServer [IP address]
  470.       Determines "CookieServer" returned to host. Optional.
  471.       Maximum 4 Cookie servers may be specified.
  472.       This is a template subcommand.
  473.  
  474.        CookieServer  147.32.14.4
  475.  
  476.     Subcommand LPRServer [IP address]
  477.       Determines "LPRServer" returned to host. Optional.
  478.       Maximum 4 LPR servers may be specified.
  479.       This is a template subcommand.
  480.  
  481.        LPRServer  147.32.14.4
  482.  
  483.  
  484.     Subcommand DNSServer [IP address]
  485.       Determines "DNSServer" returned to host. Optional.
  486.       Maximum 4 DNS servers may be specified.
  487.       This is a template subcommand.
  488.  
  489.        DNSServer  147.32.14.4
  490.  
  491.  
  492.    
  493.     Subcommand ResetTemplate
  494.       This subcommand resets the host template to the inital state -
  495.       all items are disabled.
  496.       This is a template subcommand      
  497.  
  498.  
  499.        ResetTemplate
  500.  
  501.    Subcommand Host [Name] [MAC type] [MAC addr] [IP Addr] {[Boot filename]}
  502.      This subcommand creates host record. The template, previously defined,
  503.      is saved to this record and it is used to generate reply in next time.
  504.      If the host name is "?", the name server is used for resolving the 
  505.      name from IP address. 
  506.      This is an executive subcommand.
  507.  
  508.      
  509.       Host  ?  Ethernet  00:12:34:56:78:9A  147.32.14.4   bootfile
  510.  
  511.  
  512.     
  513. P.S.: I'd appreciate any bug reports, but especially those from Pronet, IEEE802 
  514.       and Arcnet users. This has been tested on Ethernet only.
  515.  
  516. P.P.S.:
  517. If anybody finds this manual too short and unsatisfactory, I will be only
  518. pleased if he will write a better one. My English is not good enough
  519. and I'll appreciate any help.
  520.